/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.reporte.accion;

import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.persistence.EntityManager;
import org.reporte.control.AbstractFacade;
import org.reporte.control.Conexion;
import org.reporte.modelo.DatoParametroReporte;
import org.reporte.modelo.OpcionParametroReporte;
import org.reporte.modelo.ParametroReporte;
import org.reporte.utils.EncriptadorED;
import org.reporte.utils.JsfAyuda;

/**
 *
 * @author 43579648
 */
@ManagedBean
@SessionScoped
public class DatosParametroReporteManejador extends AbstractFacade<DatoParametroReporte> {

    private List<DatoParametroReporte> listaDatoParametroReporte;
    private ParametroReporte parametroReporteSeleccionado;
    private boolean datosExternos;
    private boolean nuevaEntidad;
    private boolean cambiaEventoValor;
    private boolean mostrarParametroDinamico;

    @ManagedProperty(value="#{cacheCorrelativoIdentificador}")
    private CacheCorrelativoIdentificador cacheCorrelativoIdentificador;
    
    
    /** Creates a new instance of ParametroReporteManejador */
    public DatosParametroReporteManejador() {
        super(DatoParametroReporte.class);
    }
    

    @Override
    protected EntityManager getEntityManager() {
        return Conexion.getEntityManager();
    }
    
    
    public void instanciaNuevaEntidad(){
        this.setEntity(new DatoParametroReporte());
        this.setNuevaEntidad(true);
        this.setParametroReporteSeleccionado(new ParametroReporte(1));
        //Seteando el Entity.Reporte desde reporteManejador
        this.getEntity().setReporte(
                ((ReporteManejador)JsfAyuda.getBean("reporteManejador")).getEntity()
            );
    }   
    
    
    
    public void guardarEntidad(){
        try{
            if(isNuevaEntidad()){
                if(isParametroRepetido()){
                    JsfAyuda.lanzarMensajeAdvertencia(JsfAyuda.getPropertyValue("parametroReporteRepetido"));
                    return;
                }else {
                    //Guardando el parametro Reporte
                    this.getEntity().setIdDatoParametroReporte(getCacheCorrelativoIdentificador().getIdDatoParametroReporte());
                    this.create();
                    this.setNuevaEntidad(false);
                }
            }else{
                //Modificando el parametro Reporte
                this.edit();
            }
            JsfAyuda.lanzarMensajeInfo(this.getEntity().getClass().getSimpleName() + " " + JsfAyuda.getPropertyValue("managedBeanGuardadoExitosamente"));
            //Si son datos externos recargara la lista de las modificaciones realizadas a la entidad externa
            if(isDatosExternos()){ 
                recargarContextoDatoParametroReporte();
            }
        }catch(Exception e){
            e.printStackTrace();
            JsfAyuda.lanzarMensajeError(JsfAyuda.getPropertyValue("managedBeanErrorGuardar") +  " - " + e.getMessage());
        }
    }
    
    public void eliminarEntidad(){
        try{
            System.out.println("INGRESANDO A ELIMINAR ENTIDAD");
            this.remove();
            JsfAyuda.lanzarMensajeInfo(this.getEntity().getClass().getSimpleName() + " " + JsfAyuda.getPropertyValue("managedBeanEliminadoExitosamente"));
            //Si son datos externos recargara la lista de las modificaciones realizadas a la entidad externa
            if(isDatosExternos()){
                recargarContextoDatoParametroReporte();
            }
        }catch(Exception e){
            e.printStackTrace();
            JsfAyuda.lanzarMensajeError(JsfAyuda.getPropertyValue("managedBeanErrorEliminar") + " - " + e.getMessage());
        }
    }
     
    
    public void cerrarDialogoParametro(){
        this.setNuevaEntidad(false);
        setMostrarParametroDinamico(false);
        setParametroReporteSeleccionado(null);
    }


    public void abrirDialogoParametro(){
        if(this.getEntity()!=null)
            if(this.getEntity().getOpcionParametroReporte()!=null)
                setParametroReporteSeleccionado(this.getEntity().getOpcionParametroReporte().getParametroReporte());
    }
    
    private boolean isParametroRepetido(){
        if(getParametroReporteSeleccionado().getNombre().contains("DINAM")) //Se pueden incluir N parametros dinamicos
            return false;
        for(DatoParametroReporte dato : getListaDatoParametroReporte()){    //Evalua los demas parametros y verifica si ya existen
            if(dato.getOpcionParametroReporte().getParametroReporte().getNombre().contains(getParametroReporteSeleccionado().getNombre()))
                return true;
        }
        return false;
    }


    public void escuchadorEvaluarValor(){
        if(getParametroReporteSeleccionado().getNombre().contains("DINAM"))
            setMostrarParametroDinamico(true);
        else
            setMostrarParametroDinamico(false);
        getEntity().setDescripcion(getParametroReporteSeleccionado().getDescripcion());
    }
    
    
    public void recargarContextoDatoParametroReporte(){
        ReporteManejador reporte = ((ReporteManejador)JsfAyuda.getBean("reporteManejador"));
        reporte.getEntityManager().refresh(reporte.getEntity());
        listaDatoParametroReporte = reporte.getEntity().getDatoParametroReporteList();
        System.out.println(listaDatoParametroReporte.size());
    }
    
    
    public void encriptarValor(){
     /*   System.out.println("Encriptar Valor");
            this.getEntity().setValor(EncriptadorED.getEncriptar());
            this.getEntity().setEncriptarValor(true);
            JsfAyuda.lanzarMensajeInfo(JsfAyuda.getPropertyValue("parametroReporteManagedBeanMensajeEncriptacion"));*/
    }
    

    public List<DatoParametroReporte> getListaDatoParametroReporte() {
        if(!isDatosExternos()){
            listaDatoParametroReporte = this.findAll();
        }
        return listaDatoParametroReporte;
    }

    public void setListaDatoParametroReporte(List<DatoParametroReporte> listaDatoParametroReporte) {
        this.listaDatoParametroReporte = listaDatoParametroReporte;
    }

    public boolean isDatosExternos() {
        return datosExternos;
    }

    public void setDatosExternos(boolean datosExternos) {
        this.datosExternos = datosExternos;
    }

    public boolean isNuevaEntidad() {
        return nuevaEntidad;
    }

    public void setNuevaEntidad(boolean nuevaEntidad) {
        this.nuevaEntidad = nuevaEntidad;
    }

    public boolean isCambiaEventoValor() {
        return cambiaEventoValor;
    }

    public boolean isMostrarParametroDinamico() {
        return mostrarParametroDinamico;
    }

    public void setCambiaEventoValor(boolean cambiaEventoValor) {
        this.cambiaEventoValor = cambiaEventoValor;
    }

    public void setMostrarParametroDinamico(boolean mostrarParametroDinamico) {
        this.mostrarParametroDinamico = mostrarParametroDinamico;
    }

    public ParametroReporte getParametroReporteSeleccionado() {
        return parametroReporteSeleccionado;
    }

    public void setParametroReporteSeleccionado(ParametroReporte parametroReporteSeleccionado) {
        this.parametroReporteSeleccionado = parametroReporteSeleccionado;
    }

    public CacheCorrelativoIdentificador getCacheCorrelativoIdentificador() {
        return cacheCorrelativoIdentificador;
    }

    public void setCacheCorrelativoIdentificador(CacheCorrelativoIdentificador cacheCorrelativoIdentificador) {
        this.cacheCorrelativoIdentificador = cacheCorrelativoIdentificador;
    }

  
    
    
}
